Here we look at the Metacognition subscales (Wells et al.; Packet 3) in detail.

Differences across fieldsites

Mean scores by site

First, let’s look at scores for participants in each site:

Note that this plot includes both average scores for each site (in black), and individual scores for all of the participants in that site (small, colorful points in the background, which are “jittered” around a little so that you can see them all).

I have not looked at this in detail.

Now let’s look at these differences in more detail using the “raw data” for individual questions, rather than these subscale scores.

Responses by question, by site

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vectorIgnoring unknown aesthetics: fill

I have not yet looked at this in detail, but it looks like it’s going to be interesting!

Distribution of responses for individual participants, by site

Another thing we might be interested in is how individual participants responded: Were there people who said yes to everything, or no to everything? How do these distributions of responses differ across participants in different sites?

Let’s take a look:

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

I have not yet looked at this in detail.

Just for fun, here’s another way to look at the same data, overlaying the density distributions for each site on top of each other to see where they seem to be similar/different:

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

LS0tCnRpdGxlOiAnR3JhcHBsaW5nIHdpdGggdGhlICJNZXRhY29nbml0aW9uIiBzdWJzY2FsZXMnCnN1YnRpdGxlOiAnTGFzdCB1cGRhdGVkIDIwMTgtMDQtMDgnCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIHNldCB3b3JraW5nIGRpcmVjdG9yCiMgc2V0d2QoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREFUQSBXUkFOR0xJTkcvdGVtcGxldG9uX3BhY2tldHMvcGFja2V0czEyMy8iKQoKIyBsb2FkIHBhY2thZ2VzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJtcykKbGlicmFyeShnZ2RlbmRybykKbGlicmFyeShwc3ljaCkKCiMgbG9hZCBxdWVzdGlvbiBrZXkgKGluY2x1ZGluZyBtYW51YWwgcmV2ZXJzZS1jb2RpbmcpCnF1ZXN0aW9uX2tleSA8LSByZWFkLmNzdigiLy9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9UZW1wbGV0b24gR3JhbnQvREFUQSBXUkFOR0xJTkcvdGVtcGxldG9uX3BhY2tldHMvcGFja2V0czEyMy9wYWNrZXRzMTIzX3F1ZXN0aW9uX2tleV9ieWhhbmQuY3N2IikKCiMgbG9hZCBkYXRhIChyZXZlcnNlLWNvZGVkKQpkX2xvbmcgPC0gcmVhZF9jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19kYXRhX2J5cXVlc3Rpb25fbG9uZy5jc3YiKSAlPiUKICBtdXRhdGUoY3RyeSA9IGZhY3RvcihjdHJ5LCAKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsICJjaGluYSIsICJ2YW51YXR1IikpKQpkX2xvbmdfc3Vic2NhbGUgPC0gcmVhZF9jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19kYXRhX2J5c3Vic2NhbGVfbG9uZy5jc3YiKSAlPiUKICBtdXRhdGUoY3RyeSA9IGZhY3RvcihjdHJ5LCAKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsICJjaGluYSIsICJ2YW51YXR1IikpKQoKIyBsb2FkIGRhdGEgKGJlZm9yZSByZXZlcnNlLWNvZGluZykKZF9hbGwgPC0gcmVhZC5jc3YoIi8vVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL3RlbXBsZXRvbl9wYWNrZXRzL3BhY2tldHMxMjMvcGFja2V0czEyM19kYXRhLmNzdiIpCgojIG1ha2UgY3VzdG9tIGZ1bmN0aW9ucwpyb3VuZDIgPC0gZnVuY3Rpb24oeCkge2Zvcm1hdChyb3VuZCh4LCAyKSwgZGlnaXRzID0gMil9CmBgYAoKSGVyZSB3ZSBsb29rIGF0IHRoZSBNZXRhY29nbml0aW9uIHN1YnNjYWxlcyAoV2VsbHMgZXQgYWwuOyBQYWNrZXQgMykgaW4gZGV0YWlsLgoKIyBEaWZmZXJlbmNlcyBhY3Jvc3MgZmllbGRzaXRlcwoKIyMgTWVhbiBzY29yZXMgYnkgc2l0ZQoKRmlyc3QsIGxldCdzIGxvb2sgYXQgc2NvcmVzIGZvciBwYXJ0aWNpcGFudHMgaW4gZWFjaCBzaXRlOgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX2xvbmdfc3Vic2NhbGVfYm9vdCA8LSBkX2xvbmdfc3Vic2NhbGUgJT4lCiAgZmlsdGVyKCFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICBncm91cF9ieShjdHJ5LCBwYWNrZXQsIHN1YnNjYWxlKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzdW1fc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoc3Vic2NhbGUgIT0gImF0dG4iKSAlPiUKICBsZWZ0X2pvaW4oZF9sb25nX3N1YnNjYWxlICU+JQogICAgICAgICAgICAgIGZpbHRlcighaXMubmEoc3VtX3Njb3JlKSkgJT4lCiAgICAgICAgICAgICAgY291bnQoY3RyeSwgcGFja2V0LCBzdWJzY2FsZSkpICU+JQogIG11dGF0ZShwYWNrZXQgPSBwYXN0ZSgicGFja2V0IiwgcGFja2V0KSwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSwKICAgICAgICAgc3Vic2NhbGUgPSAKICAgICAgICAgICBmYWN0b3Ioc3Vic2NhbGUsCiAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImV4d2wiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh3bF9leHRyYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZV8wMXRvMTQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlXzE1dG8xNiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGV2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbl9zZW5zb3J5X3NlZWtpbmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuX2JvZHlfYXdhcmVuZXNzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbl90cmFpdF9tZXRhbW9vZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlcjJfaGFsbHVjaW5hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9fVklTUV9kaWFsb2dpY19zcGVlY2giLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52b19WSVNRX2lubmVyX3NwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9fVklTUV9ldmFsX21vdGl2X2lubmVyX3NwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9faGFyZHlfYmVudGFsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlcl9wb3NleV9sb3NjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29fbGV3aWNraSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFfdmFuX2VsayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3Bvc2l0aXZlX2JlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3VuY29udHJvbGxhYmlsaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X25lZWRfY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfbWVudGFsX3N0YXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfbGlmZV9ldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X2luYW5pbWF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfc2VsdmVzX3NvdWxzX3dvcmxkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19lcGlzdGVtaWMiKSwKICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiYWJzb3JwdGlvbiAodGVsbGVnZW4pIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb24gKGV4dHJhKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAoIzEtMTQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMTUtMTYpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zb3J5IHNlZWtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IGF3YXJlbmVzcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRlbnRpb24gdG8gZmVlbGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYWxsdWNpbmF0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGRpYWxvZ2ljIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGV2YWx1YXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lciBzcGVlY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFyaW5nIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nIHN0eWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluZCBtZXRhcGhvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogbGFjayBvZiBjb2duaXRpdmUgY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBjb2duaXRpdmUgc2VsZi1jb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IHVuY29udHJvbGxhYmlsaXR5L2RhbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBtZW50YWwgc3RhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbGlmZSBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBpbmFuaW1hdGUgY29uc2Npb3VzbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1pbmRzLCBzZWx2ZXMsICYgd29ybGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBlcGlzdGVtb2xvZ3kiKSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjV9CmdncGxvdChkX2xvbmdfc3Vic2NhbGVfYm9vdCAlPiUKICAgICAgICAgZmlsdGVyKGdyZXBsKCJtZXRhY29nIiwgc3Vic2NhbGUpKSAlPiUKICAgICAgICAgbXV0YXRlKHN1YnNjYWxlID0gYXMuY2hhcmFjdGVyKHN1YnNjYWxlKSwKICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gZ3N1YigibWV0YWNvZy46ICIsICIiLCBzdWJzY2FsZSkpLAogICAgICAgYWVzKHggPSBjdHJ5LAogICAgICAgICAgIHkgPSBNZWFuKSkgKwogIGZhY2V0X2dyaWQofiBzdWJzY2FsZSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGRfbG9uZ19zdWJzY2FsZSAlPiUKICAgICAgICAgICAgICAgZmlsdGVyKGdyZXBsKCJ0YXRfIiwgc3Vic2NhbGUpLAogICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKHN1bV9zY29yZSkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoc3Vic2NhbGUgPSAKICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yKHN1YnNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidGF0X2NvZ25pdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9wb3NpdGl2ZV9iZWxpZWZzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF91bmNvbnRyb2xsYWJpbGl0eSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiY29nbml0aXZlIHNlbGYtY29uc2Npb3VzbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmNvbnRyb2xsYWJpbGl0eS9kYW5nZXIiKSkpLAogICAgICAgICAgICAgYWVzKHkgPSBzdW1fc2NvcmUsIGNvbG9yID0gY3RyeSksCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuMywgaGVpZ2h0ID0gMC4xNSksCiAgICAgICAgICAgICBhbHBoYSA9IDAuMywgc2l6ZSA9IDEpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoIihuPSIsIG4sICIpIiksIHkgPSBMb3dlciksIAogICAgICAgICAgICBzaXplID0gMiwgbnVkZ2VfeCA9IDAuMTUsIGhqdXN0ID0gMCkgKwogICMgc2NhbGVfeF9kaXNjcmV0ZShleHBhbmQgPSBjKDAsIDEpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTEyLjUsIDEyLjUpLCBicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAxMCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgbGFicyh0aXRsZSA9ICJNZWFuIG1ldGFjb2duaXRpb24gc2NvcmVzIGJ5IHNpdGUgKFdlbGxzIGV0IGFsLikiLAogICAgICAgc3VidGl0bGUgPSAiQSBoaWdoZXIgc2NvcmUgaW5kaWNhdGVzIG1vcmUgZW5kb3JzZW1lbnRzIG9mICdtZXRhY29nbml0aXZlJyBldmVudHMgKHJhbmdlOiAtMTIgdG8gMTIpXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIGNvbG9yID0gIlNpdGUiLAogICAgICAgeSA9ICJNZWFuIHNjb3JlIikKYGBgCgpOb3RlIHRoYXQgdGhpcyBwbG90IGluY2x1ZGVzIGJvdGggYXZlcmFnZSBzY29yZXMgZm9yIGVhY2ggc2l0ZSAoaW4gYmxhY2spLCBhbmQgaW5kaXZpZHVhbCBzY29yZXMgZm9yIGFsbCBvZiB0aGUgcGFydGljaXBhbnRzIGluIHRoYXQgc2l0ZSAoc21hbGwsIGNvbG9yZnVsIHBvaW50cyBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggYXJlICJqaXR0ZXJlZCIgYXJvdW5kIGEgbGl0dGxlIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlbSBhbGwpLgoKSSBoYXZlIG5vdCBsb29rZWQgYXQgdGhpcyBpbiBkZXRhaWwuCgpOb3cgbGV0J3MgbG9vayBhdCB0aGVzZSBkaWZmZXJlbmNlcyBpbiBtb3JlIGRldGFpbCB1c2luZyB0aGUgInJhdyBkYXRhIiBmb3IgaW5kaXZpZHVhbCBxdWVzdGlvbnMsIHJhdGhlciB0aGFuIHRoZXNlIHN1YnNjYWxlIHNjb3Jlcy4KCiMjIFJlc3BvbnNlcyBieSBxdWVzdGlvbiwgYnkgc2l0ZQoKYGBge3IsIGZpZy53aWR0aCA9IDEwLCBmaWcuYXNwID0gMC44fQpkX3Bsb3QgPC0gZF9sb25nICU+JQogIGZpbHRlcihncmVwbCgidGF0XyIsIHF1ZXN0aW9uKSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsIAogICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgICBieWhhbmRfc3Vic2NhbGUpICU+JQogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbiA9IHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwKICAgICAgICAgICAgICAgICAgICAgY29kaW5nID0gYnloYW5kX2NvZGluZywKICAgICAgICAgICAgICAgICAgICAgc3Vic2NhbGUgPSBieWhhbmRfc3Vic2NhbGUpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDMwfSkoXFxzfCQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcMVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKHF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cihxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSwgc3RvcCA9IDEwMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIi4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmcpKSkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHF1ZXN0aW9uX3RleHRfc2hvcnQsIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGAtMmA6YDJgKSwgCiAgICAgICAgICAgIGZ1bnMocmVwbGFjZSguLCBpcy5uYSguKSwgMCkpKSAlPiUKICBhcnJhbmdlKGN0cnksIGAtMmApICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXIiKSAlPiUKICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSwKICAgICAgICAgYWdyZWVfbiA9IGAxYCArIGAyYCwKICAgICAgICAgdG90YWxfbiA9IGAtMmAgKyBgLTFgICsgYDBgICsgYDFgICsgYDJgKSAlPiUKICBnYXRoZXIocmVzcG9uc2UsIG4sIGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTIiLCAiLTEiLCAiMCIsICIxIiwgIjIiKSksCiAgICAgICAgIGN0cnkgPSBmYWN0b3IoY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaGFuYSIsICJ0aGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaW5hIiwgInZhbnVhdHUiKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJVUyIsICJHaGFuYSIsICJUaGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaW5hIiwgIlZhbnVhdHUiKSkpICU+JQogIGRpc3RpbmN0KCkKCmFkanVzdCA8LSAxNQoKZ2dwbG90KGRfcGxvdCAlPiUKICAgICAgICAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSksCiAgICAgICAgICAgICAgICBzdWJzY2FsZSA9IAogICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3Ioc3Vic2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ0YXRfY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9uZWVkX2NvbnRyb2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3Bvc2l0aXZlX2JlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3VuY29udHJvbGxhYmlsaXR5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjb2duaXRpdmUgc2VsZi1jb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhY2sgb2YgY29nbml0aXZlIGNvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCB0byBjb250cm9sIHRob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29udHJvbGxhYmlsaXR5L2RhbmdlciIpKSksCiAgICAgICBhZXMoeCA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dF9zaG9ydCwgZGVzYyhxdWVzdGlvbl90ZXh0X3Nob3J0KSksCiAgICAgICAgICAgIyB4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0X3Nob3J0LCBkZXNjKG9yZGVyKSksCiAgICAgICAgICAgeSA9IG4sIGZpbGwgPSByZXNwb25zZSkpICsKICBmYWNldF9ncmlkKHN1YnNjYWxlIH4gY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2soKSwgc3RhdCA9ICJpZGVudGl0eSIsIAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChkYXRhID0gZF9wbG90ICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KGN0cnksIHN1YnNjYWxlLCBxdWVzdGlvbl90ZXh0X3Nob3J0LCBvcmRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgYWdyZWVfbiwgdG90YWxfbikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHN1YnNjYWxlID0gCiAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInRhdF9jb2duaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X25lZWRfY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfcG9zaXRpdmVfYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFjayBvZiBjb2duaXRpdmUgY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpdmUgYmVsaWVmcyByZTogd29ycnlpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyIikpKSwKICAgICAgICAgICAgYWVzKHkgPSBtYXgoZF9wbG90JHRvdGFsX24pICsgYWRqdXN0LCBmaWxsID0gTlVMTCwKICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKGFncmVlX24vdG90YWxfbiwgMikqMTAwLCAiJSIpKSwgCiAgICAgICAgICAgIHNpemUgPSAzLCBoanVzdCA9IDEpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCBtYXgoZF9wbG90JHRvdGFsX24pICsgYWRqdXN0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUFJHbiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyB0byAnTWV0YWNvZ25pdGlvbicgKFdlbGxzIGV0IGFsLikgc2NhbGUgaXRlbXMiLAogICAgICAgc3VidGl0bGUgPSAiJSBjb3JyZXNwb25kcyB0byByZXNwb25zZXMgb2YgJ0FncmVlJyBvciAnU3Ryb25nbHkgYWdyZWUnIiwKICAgICAgIHggPSAiIiwgeSA9ICJDb3VudCBvZiByZXNwb25zZXMiLCBmaWxsID0gIlJlc3BvbnNlIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQogIGNvb3JkX2ZsaXAoKQoKcm0oYWRqdXN0KQpgYGAKCkkgaGF2ZSBub3QgeWV0IGxvb2tlZCBhdCB0aGlzIGluIGRldGFpbCwgYnV0IGl0IGxvb2tzIGxpa2UgaXQncyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyEKCiMgRGlzdHJpYnV0aW9uIG9mIHJlc3BvbnNlcyBmb3IgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMsIGJ5IHNpdGUKCkFub3RoZXIgdGhpbmcgd2UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiBpcyBob3cgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgcmVzcG9uZGVkOiBXZXJlIHRoZXJlIHBlb3BsZSB3aG8gc2FpZCB5ZXMgdG8gZXZlcnl0aGluZywgb3Igbm8gdG8gZXZlcnl0aGluZz8gSG93IGRvIHRoZXNlIGRpc3RyaWJ1dGlvbnMgb2YgcmVzcG9uc2VzIGRpZmZlciBhY3Jvc3MgcGFydGljaXBhbnRzIGluIGRpZmZlcmVudCBzaXRlcz8KCkxldCdzIHRha2UgYSBsb29rOgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAzfQpkX2xvbmcgJT4lCiAgZmlsdGVyKGdyZXBsKCJ0YXRfIiwgcXVlc3Rpb24pLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbiksICFpcy5uYShyZXNwb25zZSkpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UpLAogICAgICAgICBjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDEzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHN1YmosIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpLCBmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lCiAgbXV0YXRlKHRvdGFsX24gPSBgLTJgICsgYC0xYCArIGAwYCArIGAxYCArIGAyYCwKICAgICAgICAgcHJvcF9uMiA9IGAtMmAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMSA9IGAtMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMCA9IGAwYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AxID0gYDFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDIgPSBgMmAvdG90YWxfbiwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbmEiLCAidmFudWF0dSIpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbmEiLCAiVmFudWF0dSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBzZWxlY3QoLWMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIGdhdGhlcihyZXNwb25zZSwgcHJvcCwgc3RhcnRzX3dpdGgoInByb3AiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJwcm9wX24yIiwgInByb3BfbjEiLCAicHJvcF9uMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wX3AxIiwgInByb3BfcDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWl0aGVyLi4uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWdyZWUiLCAiU3Ryb25nbHkgYWdyZWUiKSksCiAgICAgICAgIHN1YnNjYWxlID0gZmFjdG9yKHN1YnNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ0YXRfY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfbmVlZF9jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3Bvc2l0aXZlX2JlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfdW5jb250cm9sbGFiaWxpdHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiY29nbml0aXZlIHNlbGYtY29uc2Npb3VzbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhY2sgb2YgY29nbml0aXZlIGNvbmZpZGVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29udHJvbGxhYmlsaXR5L2RhbmdlciIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJvcCwgZmlsbCA9IGN0cnkpKSArCiAgZmFjZXRfZ3JpZChpbnRlcmFjdGlvbihyZXNwb25zZSwgc3Vic2NhbGUsIHNlcCA9ICJcbiIpIH4gY3RyeSwgCiAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLzUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzMDAsIDEwKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb25zIG9mIGhvdyBtYW55IHRpbWVzIHBhcnRpY2lwYW50cyBlbmRvcnNlZCBlYWNoIHJlc3BvbnNlIG9wdGlvbiBmb3IgdGhlICdNZXRhY29nbml0aW9uJyAoV2VsbHMgZXQgYWwuKSBzY2FsZSBpdGVtcyIsCiAgICAgICB4ID0gIlByb3BvcnRpb24gb2YgcmVzcG9uc2VzIChhdCB0aGUgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCBsZXZlbCkiLCB5ID0gIkNvdW50IG9mIHBhcnRpY2lwYW50cyIsIGZpbGwgPSAiU2l0ZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKSSBoYXZlIG5vdCB5ZXQgbG9va2VkIGF0IHRoaXMgaW4gZGV0YWlsLgoKSnVzdCBmb3IgZnVuLCBoZXJlJ3MgYW5vdGhlciB3YXkgdG8gbG9vayBhdCB0aGUgc2FtZSBkYXRhLCBvdmVybGF5aW5nIHRoZSBkZW5zaXR5IGRpc3RyaWJ1dGlvbnMgZm9yIGVhY2ggc2l0ZSBvbiB0b3Agb2YgZWFjaCBvdGhlciB0byBzZWUgd2hlcmUgdGhleSBzZWVtIHRvIGJlIHNpbWlsYXIvZGlmZmVyZW50OgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAxfQpkX2xvbmcgJT4lCiAgZmlsdGVyKGdyZXBsKCJ0YXRfIiwgcXVlc3Rpb24pLAogICAgICAgICAhZ3JlcGwoImF0dG4iLCBxdWVzdGlvbiksICFpcy5uYShyZXNwb25zZSkpICU+JQogIGxlZnRfam9pbihxdWVzdGlvbl9rZXkgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocXVlc3Rpb25fbGFiZWxfdW5pdmVyc2FsLCAKICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgYnloYW5kX3N1YnNjYWxlKSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBxdWVzdGlvbl9sYWJlbF91bml2ZXJzYWwsCiAgICAgICAgICAgICAgICAgICAgIGNvZGluZyA9IGJ5aGFuZF9jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgIHN1YnNjYWxlID0gYnloYW5kX3N1YnNjYWxlKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UpLAogICAgICAgICBjb2RpbmcgPSBmYWN0b3IoY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiLTEiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiKFJFVkVSU0VEKSIsICIiKSksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCcoLnsxLDEzMH0pKFxcc3wkKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXDFcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChzdWJzdHIocXVlc3Rpb25fdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IDEsIHN0b3AgPSAxMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nKSkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY3RyeSwgc3Vic2NhbGUsIHN1YmosIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocmVzcG9uc2UsIG4pICU+JQogIG11dGF0ZV9hdCh2YXJzKGMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpLCBmdW5zKHJlcGxhY2UoLiwgaXMubmEoLiksIDApKSkgJT4lCiAgbXV0YXRlKHRvdGFsX24gPSBgLTJgICsgYC0xYCArIGAwYCArIGAxYCArIGAyYCwKICAgICAgICAgcHJvcF9uMiA9IGAtMmAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMSA9IGAtMWAvdG90YWxfbiwKICAgICAgICAgcHJvcF9uMCA9IGAwYC90b3RhbF9uLAogICAgICAgICBwcm9wX3AxID0gYDFgL3RvdGFsX24sCiAgICAgICAgIHByb3BfcDIgPSBgMmAvdG90YWxfbiwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbmEiLCAidmFudWF0dSIpLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlVTIiwgIkdoYW5hIiwgIlRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbmEiLCAiVmFudWF0dSIpKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBzZWxlY3QoLWMoYC0yYCwgYC0xYCwgYDBgLCBgMWAsIGAyYCkpICU+JQogIGdhdGhlcihyZXNwb25zZSwgcHJvcCwgc3RhcnRzX3dpdGgoInByb3AiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJwcm9wX24yIiwgInByb3BfbjEiLCAicHJvcF9uMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wX3AxIiwgInByb3BfcDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3Ryb25nbHkgZGlzYWdyZWUiLCAiRGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWl0aGVyIGFncmVlIG5vciBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFncmVlIiwgIlN0cm9uZ2x5IGFncmVlIikpLAogICAgICAgICBzdWJzY2FsZSA9IGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidGF0X2NvZ25pdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9jb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X25lZWRfY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9wb3NpdGl2ZV9iZWxpZWZzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X3VuY29udHJvbGxhYmlsaXR5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCB0byBjb250cm9sIHRob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpdmUgYmVsaWVmcyByZTogd29ycnlpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmNvbnRyb2xsYWJpbGl0eS9kYW5nZXIiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHByb3AsIGZpbGwgPSBjdHJ5KSkgKwogIGZhY2V0X2dyaWQocmVzcG9uc2UgfiBzdWJzY2FsZSwgCiAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZpeGVkIikgKwogIGdlb21fZGVuc2l0eShhbHBoYSA9IDAuMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMC4yNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMwMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgaG93IG1hbnkgdGltZXMgcGFydGljaXBhbnRzIGVuZG9yc2VkIGVhY2hcbnJlc3BvbnNlIG9wdGlvbiBmb3IgdGhlICdNZXRhY29nbml0aW9uJyAoV2VsbHMgZXQgYWwuKSBzY2FsZSBpdGVtcyIsCiAgICAgICB4ID0gIlByb3BvcnRpb24gb2YgcmVzcG9uc2VzIChhdCB0aGUgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudCBsZXZlbCkiLCB5ID0gIkNvdW50IG9mIHBhcnRpY2lwYW50cyIsIGZpbGwgPSAiU2l0ZSIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIiwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKYGBgCg==